package cn.jcet.service.impl;

import cn.hutool.core.date.DateUtil;
import cn.jcet.constants.Constants;
import cn.jcet.domain.DictType;
import cn.jcet.dto.BaseDto;
import cn.jcet.dto.DictTypeDto;
import cn.jcet.mapper.DictTypeMapper;
import cn.jcet.service.DictTypeService;
import cn.jcet.vo.DataGridView;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @author 鲜磊
 */
@Service
public class DictTypeServiceImpl  implements DictTypeService {

    @Autowired
    private DictTypeMapper dictTypeMapper;

    @Override
    public DataGridView listPage(DictTypeDto dictTypeDto) {
        // 分页查询
        Page<DictType> page = new Page<>(dictTypeDto.getPageNum(),dictTypeDto.getPageSize());
        // 条件查询
        QueryWrapper<DictType> qw = new QueryWrapper<>();
        // 查询名称
        qw.like(StringUtils.isNotBlank(dictTypeDto.getDictName()),DictType.COL_DICT_NAME,dictTypeDto.getDictName());
        // 类型
        qw.like(StringUtils.isNotBlank(dictTypeDto.getDictType()),DictType.COL_DICT_TYPE,dictTypeDto.getDictType());
        // 状态
        qw.eq(StringUtils.isNotBlank(dictTypeDto.getStatus()),DictType.COL_STATUS,dictTypeDto.getStatus());
        // 开始时间
        qw.ge(null != dictTypeDto.getBeginTime(),DictType.COL_CREATE_TIME,dictTypeDto.getBeginTime());
        // 结束时间
        qw.le(null != dictTypeDto.getEndTime(),DictType.COL_CREATE_TIME,dictTypeDto.getEndTime());

        // 调用查询方法 分页 条件
        this.dictTypeMapper.selectPage(page,qw);
        // 返回数据
        return new DataGridView(page.getTotal(),page.getRecords());
    }

    @Override
    public DataGridView list() {
        QueryWrapper<DictType> qw = new QueryWrapper<>();
        // 只查询状态为0的数据
        qw.eq(DictType.COL_STATUS,Constants.STATUS_TRUE);
        // 查询全部数据
        return new DataGridView(this.dictTypeMapper.selectList(qw));
    }

    @Override
    public Boolean checkDictTypeUnique(Long dictId, String dictType) {
        //  判断当前数据是否存在 如果为空表示为-1 否则存在
        dictId = (dictId == null)?-1L:dictId;

        QueryWrapper<DictType> qw = new QueryWrapper<>();
        qw.eq(DictType.COL_DICT_TYPE,dictType);
        DictType type = this.dictTypeMapper.selectOne(qw);
        // 如果数据都不存在的时候，没有这个id以及这条数据
        if (null != type && dictId.longValue() != type.getDictId().longValue()){
            // 说明不存在
            return true;
        }
        // 存在
        return false;
    }

    @Override
    public int insert(DictTypeDto dictTypeDto) {
        DictType dictType = new DictType();
        //  字段拷贝
        BeanUtils.copyProperties(dictTypeDto,dictType);
        // 设置操作人
        dictType.setDictName(dictTypeDto.getSimpleUser().getUserName());
        // 操作时间
        dictType.setCreateTime(DateUtil.date());

        return this.dictTypeMapper.insert(dictType);
    }

    @Override
    public int update(DictTypeDto dictTypeDto) {
        DictType dictType = new DictType();
        //  字段拷贝
        BeanUtils.copyProperties(dictTypeDto,dictType);
        // 设置更新人
        dictType.setUpdateBy(dictTypeDto.getSimpleUser().getUserName());
        // 更新时间
        dictType.setUpdateTime(DateUtil.date());
        return this.dictTypeMapper.updateById(dictType);
    }

    @Override
    public int deleteDictTypeByIds(Long[] dictIds) {
        //  数组转换为集合
        List<Long> ids = Arrays.asList(dictIds);
        // 判断数据不为空并且长度大于0
        if (null != ids && ids.size() >0){
            // 批量上传
            return this.dictTypeMapper.deleteBatchIds(ids);
        }
        // 没有返回-1
        return -1;
    }

    @Override
    public DictType selectDictTypeById(Long dictId) {
        // 根据id查询数据
        return this.dictTypeMapper.selectById(dictId);
    }
}
